package com.bea.ftd.mapping.message;

import org.dom4j.Element;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Dom4JUtils {
    // 方法入参为一个dom4j 解析的根节点 直接转化成javaBean  Object 是要转化的javaBean类
    public static Object EleToBean(Element e, Object obj) {
        Field[] declaredFields = obj.getClass().getDeclaredFields();
        Method getmeth;  //实例的get方法
        Method setmeth; //实例的set方法

        Field[] properties = obj.getClass().getDeclaredFields();//获得实例的属性
        try {
            for (int j = 0; j < properties.length; j++) {//遍历所有类中的属性得到相应的set方法
                setmeth = obj.getClass().getMethod(
                        "set"
                                + properties[j].getName().substring(0, 1)
                                .toUpperCase()
                                + properties[j].getName().substring(1),properties[j].getType());

                String name = properties[j].getName();
                String upperCase = name.toUpperCase();//因为 返回的xml文件都是大写的 所以我这转化了一下
                setmeth.invoke(obj, e.elementText(upperCase));//将对应节点的值存入
            }
        } catch (IllegalAccessException e1) {
            e1.printStackTrace();
        }
        catch (NoSuchMethodException e1) {
            e1.printStackTrace();
        } catch (SecurityException e1) {
            e1.printStackTrace();
        } catch (IllegalArgumentException e1) {
            e1.printStackTrace();
        } catch (InvocationTargetException e1) {
            e1.printStackTrace();
        }
        return obj;
    }


}
